/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package familytree.struts.actions;

import familytree.exception.FileSizeTooLongException;
import familytree.negocio.IAlbumProcessor;
import familytree.negocio.INodoProcessor;
import familytree.negocio.IImagenProcessor;
import familytree.negocio.bo.AlbumBO;
import familytree.negocio.bo.ImagenBO;
import familytree.negocio.bo.NodoBO;
import familytree.persistencia.pojos.Album;
import familytree.persistencia.pojos.Imagen;
import familytree.persistencia.pojos.Nodo;
import familytree.persistencia.pojos.Usuario;
import familytree.struts.forms.ImagenForm;
import java.io.File;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.Globals;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

/**
 *
 * @author Antonio
 */
public class MediaFotosAction extends Action {

    /* forward name="ok" path="" */
    private final static String OK = "ok";

    /*forward name = "fallo" path=""*/
    private final static String FALLO = "fallo";
    private final static String VOLVER = "volver";

    
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {



        Usuario usuario = (Usuario) request.getSession().getAttribute("usuarioActual");
        Nodo nodo = (Nodo) request.getSession().getAttribute("nodoActual");
        String accion = (String) request.getParameter("accionSeleccionada");
        String nombreAlbum = request.getParameter("nombreAlbum");
        String ruta = request.getSession().getServletContext().getRealPath("");
        
        IAlbumProcessor albumBO = new AlbumBO();
        IImagenProcessor imagenBO = new ImagenBO();
        if(accion.toLowerCase().equals("hacerprincipal")){
             String idImagen = request.getParameter("imagenSeleccionada");
          
             Imagen imagen = imagenBO.getImagenById(idImagen);
             nodo.setImagen(imagen);
             INodoProcessor nodoBO = new NodoBO();
             nodoBO.updateNodo(nodo);
             Nodo nodoModificado = nodoBO.getNodoPorIdNodo(nodo.getIdNodo());
             request.getSession().setAttribute("nodoActual", nodoModificado);
             return mapping.findForward("hacerPrincipal");
        }
        else if (accion.toLowerCase().equals("nuevaimagen")) {

            ImagenForm iform = (ImagenForm) form;
            iform.setNombre("Sin título");
            byte[] arrayImagen = iform.getArchivo().getFileData();
            if (arrayImagen.length == 0){
                request.setAttribute("indice", 0);
                Album albumActual = albumBO.getAlbum(nombreAlbum, nodo);
                albumActual = albumBO.createImagenes(albumActual, ruta);
                request.setAttribute("album", albumActual);
                ActionErrors errores = new ActionErrors();
                errores.add("noimagen", new ActionMessage("error.imagenvacia"));
                addErrors(request, errores);
                return mapping.findForward(FALLO);
            }
            try {
                Album album = albumBO.insertImagen(arrayImagen, iform.getArchivo().getFileName(), iform.getNombre(), nodo, usuario, nombreAlbum);
                album = albumBO.createImagenes(album, ruta);
                request.setAttribute("album", album);
                request.setAttribute("indice", 0);
                INodoProcessor nodoBO = new NodoBO();
                Nodo nodoNuevo = nodoBO.getNodoPorIdNodo(nodo.getIdNodo());
                request.getSession().setAttribute("nodoActual", nodoNuevo);
                
                
            } catch (FileSizeTooLongException fe) {
                ActionMessage msg = new ActionMessage("errors.imagen.demasiadoGrande");
                ActionMessages messages = new ActionMessages();
                
                messages.add(Globals.MESSAGE_KEY, msg);                
                saveMessages(request,messages);
                
                return mapping.findForward(FALLO);
            }

            return mapping.findForward(VOLVER);

        } else if (accion.toLowerCase().indexOf("avance") > -1) {
            int avance = Integer.parseInt(accion.substring(6));

            Album album = albumBO.getAlbum(nombreAlbum, nodo);
            album = albumBO.createImagenes(album, ruta);
            request.setAttribute("album", album);
            request.setAttribute("indice", avance + 12);
            return mapping.findForward(VOLVER);
        } else if (accion.toLowerCase().indexOf("retroceso") > -1) {
            int retroceso = Integer.parseInt(accion.substring(9));

            Album album = albumBO.getAlbum(nombreAlbum, nodo);
            album = albumBO.createImagenes(album, ruta);
            request.setAttribute("album", album);
            request.setAttribute("indice", retroceso - 12);
            return mapping.findForward(VOLVER);
        }
        return mapping.findForward(OK);

    }
}